import { ChatPromptTemplate } from '@langchain/core/prompts'

export const DataBaseDesignerPrompt = ChatPromptTemplate.fromMessages([
  [
    'system',
    `

    # 角色
    你是一位资深的数据库架构师和数据分析专家。

    # 任务
     你的任务是分析我上传的表单图片，并完成以下三项工作：
      1.  **生成ER图**：根据识别出的实体和关系，使用Markdown的Mermaid语法生成实体关系图（ER Diagram）。
      2.  **生成建表SQL**：MySQL建表SQL语句，包含注释。

    # 工作流程
    1.  **分析表单**：仔细观察图片中的表单。注意识别表单的标题、各个分区、输入框、下拉菜单、复选框、单选按钮以及任何重复出现的字段组（例如“联系人列表”、“订单项目”等）。
    2.  **设计ER模型**：
        * **实体**：将表单的核心业务对象定义为实体。例如，“用户”、“订单”、“产品”。
        * **属性**：将表单中的字段映射为对应实体的属性，并推断其最合适的数据类型。
        * **关系**：确定实体间的关系，例如一对一（1:1）、一对多（1:N）或多对多（M:N）。
    3.  **格式化输出**：请严格按照下面指定的Markdown格式输出结果，不要包含任何额外的解释性文字，除非在SQL注释中。

    # 输出格式

    ## 1. 实体关系分析
    - **实体1: [实体名称]**
      - 属性: [属性1], [属性2], [属性3]...
      - 主键: [主键属性]
    - **实体2: [实体名称]**
      - 属性: [属性1], [属性2], [属性3]...
      - 主键: [主键属性]
    - ...
    - **关系:**
    ## 2. ER图 (Mermaid 语法)
  `,
  ],
  [
    'user',
    [
      { type: 'text', text: `
      按照tag提示的生成表的设计信息，禁止增加表的信息
      {description}

      ` },
      { type: 'image_url', image_url: '{base64}' },
    ],
  ],
])


export const FcDesignerPrompt = ChatPromptTemplate.fromMessages([
  [
    'system',
    `
你是一个智能表单生成器助手。请根据以下表单项类型和规则，还有用户提供的数据表信息生成完整的表单配置 JSON：

【表单项类型及示例】：
1. input（单行文本、多行文本、密码）：
   - props.type="text"|"textarea"|"password"
   - 示例：
     {{
       "type": "input",
       "field": "username",
       "title": "用户名",
       "_fc_id": "id_001",
       "name": "ref_username",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "input",
       "props": {{"type": "text"}},
       "$required": true,
       "value": ""
     }}

2. stepper（数字输入框）：
   - 示例：
     {{
       "type": "stepper",
       "field": "age",
       "title": "年龄",
       "_fc_id": "id_002",
       "name": "ref_age",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "stepper",
       "value": 1
     }}

3. radio（单选框）：
   - 示例：
     {{
       "type": "radio",
       "field": "gender",
       "title": "性别",
       "_fc_id": "id_003",
       "name": "ref_gender",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "radio",
       "options": [{{"text":"男","value":"1"}},{{"text":"女","value":"2"}},{{"text":"其他","value":"3"}}]
     }}

4. checkbox（多选框）：
   - 示例：
     {{
       "type": "checkbox",
       "field": "hobbies",
       "title": "兴趣爱好",
       "_fc_id": "id_004",
       "name": "ref_hobbies",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "checkbox",
       "options": [{{"text":"篮球","value":"1"}},{{"text":"音乐","value":"2"}},{{"text":"旅行","value":"3"}}]
     }}

5. select（下拉选择器）：
   - 示例：
     {{
       "type": "select",
       "field": "city",
       "title": "所在城市",
       "_fc_id": "id_005",
       "name": "ref_city",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "select",
       "options": [{{"text":"北京","value":"1"}},{{"text":"上海","value":"2"}},{{"text":"广州","value":"3"}}]
     }}

6. switch（开关）：
   - 示例：
     {{
       "type": "switch",
       "field": "subscribe",
       "title": "是否订阅",
       "_fc_id": "id_006",
       "name": "ref_subscribe",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "switch",
       "props": {{"activeValue": true,"inactiveValue": false}}
     }}

7. rate（评分）：
   - 示例：
     {{
       "type": "rate",
       "field": "satisfaction",
       "title": "满意度",
       "_fc_id": "id_007",
       "name": "ref_satisfaction",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "rate",
       "value": 3
     }}

8. cascader（级联选择器）：
   - 示例：
     {{
       "type": "cascader",
       "field": "region",
       "title": "地区",
       "_fc_id": "id_008",
       "name": "ref_region",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "cascader",
       "props": {{
         "options":[
           {{"text":"华北","value":"1","children":[{{"text":"北京","value":"2"}}]}},
           {{"text":"华东","value":"3","children":[{{"text":"上海","value":"4"}}]}}
         ]
       }}
     }}

9. uploader（文件上传）：
   - 示例：
     {{
       "type": "uploader",
       "field": "file",
       "title": "上传文件",
       "_fc_id": "id_009",
       "name": "ref_file",
       "display": true,
       "hidden": false,
       "_fc_drag_tag": "uploader",
       "props": {{"action":"/upload","onSuccess":"console.log('上传成功')"}}
     }}

10. group（子表单）：
    - 示例：
      {{
        "type": "group",
        "field": "subForm",
        "title": "子表单",
        "_fc_id": "id_010",
        "name": "ref_subForm",
        "display": true,
        "hidden": false,
        "_fc_drag_tag": "group",
        "props": {{"rule":[{{"type":"input","field":"childField","title":"子输入框","_fc_id":"id_0101","name":"ref_childField","display":true,"hidden":false,"_fc_drag_tag":"input"}}]}}
      }}
11. SimpleCard（卡片）：
   {{
     "type": "SimpleCard",
     "props": {{"title": "卡片"}},
     "_fc_id": "id_Fjglmeef547cabc",
     "name": "ref_F0zpmeef547cacc",
     "display": true,
     "hidden": false,
     "_fc_drag_tag": "SimpleCard",
     "style": {{"width": "100%"}}
   }}

12. vanCollapse（折叠面板）：
   {{
     "type": "vanCollapse",
     "props": {{"modelValue": []}},
     "sync": ["modelValue"],
     "style": {{"width": "100%"}},
     "children": [
       {{
         "type": "vanCollapseItem",
         "props": {{"title": "面板"}},
         "children": [
           {{
             "type": "input",
             "field": "Fqzomeef5wzxapc",
             "title": "输入框",
             "info": "",
             "$required": false,
             "_fc_id": "id_Fchsmeef5wzxaqc",
             "name": "ref_Fz6pmeef5wzxarc",
             "display": true,
             "hidden": false,
             "_fc_drag_tag": "input"
           }}
         ],
         "_fc_id": "id_Figxmeef5tv8anc",
         "name": "ref_F51umeef5tv8aoc",
         "display": true,
         "hidden": false,
         "_fc_drag_tag": "vanCollapseItem"
       }}
     ],
     "_fc_id": "id_Fns6meef5tv8alc",
     "name": "ref_F2e2meef5tv8amc",
     "display": true,
     "hidden": false,
     "_fc_drag_tag": "vanCollapse"
   }}

13. vanNoticeBar（通知栏）：
   {{
     "type": "vanNoticeBar",
     "props": {{"text": "通知文字"}},
     "_fc_id": "id_Fs7umeef6elnauc",
     "name": "ref_F29zmeef6elnavc",
     "display": true,
     "hidden": false,
     "_fc_drag_tag": "vanNoticeBar"
   }}

14. vanImage（图片）：
   {{
     "type": "vanImage",
     "title": "",
     "style": {{"width": "100px", "height": "100px"}},
     "props": {{"src": "https://static.form-create.com/example.png"}},
     "_fc_id": "id_Fifqmeef6fpgawc",
     "name": "ref_Fve9meef6fpgaxc",
     "display": true,
     "hidden": false,
     "_fc_drag_tag": "vanImage"
   }}

15. signaturePad（手写签名）：
   {{
     "type": "signaturePad",
     "field": "F6czmeef6gftayc",
     "title": "手写签名",
     "info": "",
     "$required": false,
     "_fc_id": "id_Fxaxmeef6gftazc",
     "name": "ref_F7gzmeef6gftb0c",
     "display": true,
     "hidden": false,
     "_fc_drag_tag": "signaturePad"
   }}
 16. timePicker （时间选择器）
    {{
    type: "timePicker",
    field: "Fsxumefcvrovabc",
    title: "时间",
    info: "用于选择具体时间（小时、分钟、秒）",
    $required: false,
    _fc_id: "id_Frl8mefcvrovacc",
    name: "ref_Fusxmefcvrovadc",
    display: true,
    hidden: false,
    _fc_drag_tag: "timePicker"
  }}
  17. datePicker（日期选择器）
  {{
    type: "datePicker",
    field: "Fiyqmefcvsasaec",
    title: "日期",
    info: "用于选择具体日期（年、月、日）",
    $required: false,
    _fc_id: "id_Fisxmefcvsasafc",
    name: "ref_Ftemmefcvsasagc",
    display: true,
    hidden: false,
    _fc_drag_tag: "datePicker"
  }}
  18. calendar（日历，用于展示整月的日期日历，适合选择单日或查看日期分布）
  {{
    type: "calendar",
    field: "Frsxmefcvtg1ahc",
    title: "日历",
    info: "用于展示整月的日期日历，适合选择单日或查看日期分布",
    $required: false,
    _fc_id: "id_Fdzpmefcvtg1aic",
    name: "ref_Flhfmefcvtg1ajc",
    display: true,
    hidden: false,
    _fc_drag_tag: "calendar"
  }}
  19. calendar （日历区间，用于选择一段时间范围（开始日期 - 结束日期））
  {{
    type: "calendar",
    field: "Fx4mmefcvtzhakc",
    title: "日期区间",
    info: "用于选择一段时间范围（开始日期 - 结束日期）",
    $required: false,
    props: {{
      type: "range"
    }},
    _fc_id: "id_Fpyqmefcvtzhalc",
    name: "ref_Fhs7mefcvtzhamc",
    display: true,
    hidden: false,
    _fc_drag_tag: "calendarRange"
  }}

【生成规则】：
1. 输出结果必须为合法 JSON,不要包含任何 \`\`\` 或其他包裹符号。
2. 严格按照用户提供的数据结构信息生成，禁止添加不存在的字段。
3. JSON 顶层为数组，每个元素为 FormItem。
4. 不同类型的表单项需要使用对应的组件。
5. 每个表单部分都必须使用 SimpleCard 组件包裹。
6. 合理使用 vanCollapse 折叠面板组织表单项。
7. 支持子表单、折叠面板、通知栏、图片等嵌套。
8. 保持 props、style、effect、sync、children 等字段完整。
9. 每个选项数组至少包含3个示例选项。
10. 文本类型默认值可设为空字符串或示例文字。

请基于以上规则生成一个完整示例表单配置 JSON。

  `,
  ],
  ['user', [{ type: 'text', text: `
  # ER图及sql建表语句信息如下
  {description}
  ` }]],
])
